package co.edu.udea.lab.iu.client;

import java.util.ArrayList;
import java.util.List;

import co.edu.udea.lab.iu.shared.UsuarioSingleton;
import co.edu.udea.lab.iu.shared.dto.SolicitudGWT;

import com.google.gwt.core.client.GWT;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.uibinder.client.UiBinder;
import com.google.gwt.uibinder.client.UiField;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.google.gwt.user.client.ui.Button;
import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.FlexTable;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.Widget;

public class MisSolicitudes extends Composite {

	private static MisSolicitudesUiBinder uiBinder = GWT
			.create(MisSolicitudesUiBinder.class);

	interface MisSolicitudesUiBinder extends UiBinder<Widget, MisSolicitudes> {
	}

	/**
	 * Campos de la pagina
	 */
	@UiField
	Label labelMensaje;

	@UiField
	FlexTable tabla;	
	
	@UiField
	Button viewDispositivos;
	
	private ListaDispositivos listaDispositivos;
	List<SolicitudGWT> solicitudes = new ArrayList<SolicitudGWT>();
	
	public MisSolicitudes() {
		initWidget(uiBinder.createAndBindUi(this));
		
		tabla.setText(0, 0, "Id.Solicitud");
		tabla.setText(0, 1, "Dispositivo");
		tabla.setText(0, 2, "FechaSolicitud");
		tabla.setText(0, 3, "Estado");
		tabla.setText(0, 4, "Detalles");
		
		tabla.getCellFormatter().setWidth(0, 0, "50px");
		tabla.getCellFormatter().setWidth(0, 1, "200px");
		tabla.getCellFormatter().setWidth(0, 2, "100px");
		tabla.getCellFormatter().setWidth(0, 3, "100px");
		tabla.getCellFormatter().setWidth(0, 4, "300px");
		
		//Obtengo la identificacion del usuario actual
		Integer idU = Integer.parseInt(UsuarioSingleton.getInstance().getUsuarioGWT().getUsuario().trim());
		SolicitudService.Util.getInstance().obtenerSolicitudes(idU, new AsyncCallback<List<SolicitudGWT>>() {
			
			@Override
			public void onSuccess(List<SolicitudGWT> result) {
				if(result.size() == 0){
					mostrarMensaje("No se obtuvieron resultados de la consulta");
					return;
				}
				
				solicitudes = result;
				llenarTabla();
			}
			
			@Override
			public void onFailure(Throwable caught) {
				mostrarMensaje(caught.getMessage());
			}
		});
		
		viewDispositivos.addClickHandler(new ClickHandler() {
			
			@Override
			public void onClick(ClickEvent event) {
				verDispositivos();
			}
		});
	}
	
	private void verDispositivos(){
		this.setVisible(false);
		listaDispositivos.setVisible(true);
	}
	
	private void mostrarMensaje(String mensaje){
		labelMensaje.setVisible(true);
		labelMensaje.setText(mensaje);
	}
	
	public void llenarTabla(){
		
		for(int i = 1; i < tabla.getRowCount(); i++){
			tabla.removeRow(i);
		}
		
		for(SolicitudGWT solGwt : solicitudes){
			adicionarSolicitud(solGwt);
		}
	}
	
	public void adicionarSolicitud(final SolicitudGWT solicitud){
		
		final int indice = tabla.getRowCount();
		
		tabla.setText(indice, 0, solicitud.getId()+"");
		tabla.setText(indice, 1, solicitud.getDispositivo());
		tabla.setText(indice, 2, solicitud.getFechaPrestamo().toString());
		tabla.setText(indice, 3, solicitud.getEstado());
		tabla.setText(indice, 4, solicitud.getDetalles());
	}

	public ListaDispositivos getListaDispositivos() {
		return listaDispositivos;
	}

	public void setListaDispositivos(ListaDispositivos listaDispositivos) {
		this.listaDispositivos = listaDispositivos;
	}
}
